home *** CD-ROM | disk | FTP | other *** search
- ` -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- ` PCX Show v1.0
- ` -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- ` By Rich Davey (rich@fatal-design.com)
- ` -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- ` Music listened to while coding this
- ` Gladiator Motion Picture Soundtrack
- ` -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- ` Note:
- ` Fed-up using BMP's? Well now you can
- ` use PCX files instead! You can only
- ` use 256 colour PCX files though, but
- ` the compression ratio is still far
- ` greater than BMP. This is a function
- ` for inclusion in your own programs.
- `
- ` Simply call it with:
- `
- ` PCXShow("filename.pcx","command",bitmap)
- `
- ` Where filename.pcx is a valid 256 colour
- ` PCX file (of any dimension)
- ` Command can be either "info" or "show"
- ` info will print a PCX info screen and
- ` show will actually render the image
- ` Bitmap can be used to tell it to render
- ` the pcx to a different bitmap (default is 0)
-
- sync rate 0
- sync on
- hide mouse
-
- PCXShow("rich.pcx","info",0)
-
- wait key
- cls 0
-
- PCXShow("rich.pcx","show",0)
-
- wait key
- end
-
-
-
- ` PCX Show Version 1.0 Function
- ` (C)opyright Richard Davey, DarkForge, 2000
-
- function PCXShow(file$,command$,bmap)
-
- filesize=file size(file$)
-
- if filesize<0
- print "PCXShow Error: File size is zero bytes! Does it exist?"
- wait key
- end
- endif
-
- dim pcx(filesize)
- open to read 1,file$
-
- for a=0 to filesize
- read byte 1,pcx(a)
- next a
-
- close file 1
-
- manufacturer=pcx(0)
- version=pcx(1)
- encoding=pcx(2)
- bitsperpixel=pcx(3)
- planes=pcx(65)
-
- open to read 1,file$
- for a=0 to 3
- read byte 1,null
- next a
-
- read word 1,xmin
- read word 1,ymin
- read word 1,xmax
- read word 1,ymax
- read word 1,hres
- read word 1,vres
-
- for a=0 to 49
- read byte 1,null
- next a
-
- read word 1,bytesperline
- read word 1,paletteinfo
-
- close file 1
-
- dimensionx=xmax-xmin
- dimensiony=ymax-ymin
- inc dimensionx
- inc dimensiony
-
- totalbytes=planes*bytesperline
-
- if manufacturer=10
- manufacturer$="ZSoft"
- else
- manufacturer$="Unknown"
- endif
-
- if version=0 then version$="2.5"
- if version=2 then version$="2.8 w/palette information"
- if version=3 then version$="2.8 w/o palette information"
- if version=5 then version$="3.0"
- if version$="" then version$="Unknown"
-
- if encoding=1
- encoding$="Run Length Encoding"
- else
- encoding$="Unknown"
- endif
-
- if paletteinfo=1 then paletteinfo$="Color/BW"
- if paletteinfo=2 then paletteinfo$="Greyscale"
-
- if pcx(filesize-769)=12
-
- dim vga_r(256)
- dim vga_g(256)
- dim vga_b(256)
-
- vc=0 : a=filesize-768
-
- repeat
- vga_r(vc)=pcx(a)
- vga_g(vc)=pcx(a+1)
- vga_b(vc)=pcx(a+2)
- inc vc
- inc a,3
- until vc=255
-
- else
-
- print "PCXShow Error : No support for < 256 colour PCXs"
- wait key
- end
-
- endif
-
- if command$="info"
-
- for bgcol=50 to 150 step 5
- ink rgb(0,0,bgcol),rgb(0,0,0)
- line 0,by,639,by
- inc by
- next bgcol
-
- for bgcol=150 to 50 step -5
- ink rgb(0,0,bgcol),rgb(0,0,0)
- line 0,by,639,by
- inc by
- next bgcol
-
- by=420
- for bgcol=50 to 150 step 5
- ink rgb(0,0,bgcol),rgb(0,0,0)
- line 0,by,639,by
- inc by
- next bgcol
-
- for bgcol=150 to 50 step -5
- ink rgb(0,0,bgcol),rgb(0,0,0)
- line 0,by,639,by
- inc by
- next bgcol
-
- ink rgb(255,255,255),rgb(0,0,0)
- set text font "Courier"
- set text size 10
- center text 320,15,"PCX Show v1.0 - (C) DarkForge 2000"
- center text 320,435,"www.darkforge.co.uk"
-
- text 50,50,"Filename:"
- text 300,50,file$
-
- text 50,70,"Manufacturer:"
- text 300,70,manufacturer$
-
- text 50,90,"Version:"
- text 300,90,version$
-
- text 50,110,"Encoding:"
- text 300,110,encoding$
-
- text 50,130,"Bits per Pixel:"
- text 300,130,str$(bitsperpixel)
-
- text 50,150,"X Min:"
- text 300,150,str$(xmin)
-
- text 50,170,"Y Min:"
- text 300,170,str$(ymin)
-
- text 50,190,"X Max:"
- text 300,190,str$(xmax)
-
- text 50,210,"Y Max:"
- text 300,210,str$(ymax)
-
- text 50,230,"Colour planes:"
- text 300,230,str$(planes)
-
- text 50,250,"Bytes per Scanline:"
- text 300,250,str$(bytesperline)
-
- text 50,270,"Palette Info:"
- text 300,270,paletteinfo$
-
- center text 320,300,"16 Colour Palette"
-
- ink rgb(255,255,255),rgb(0,0,0)
- blx=320-65
- box blx,320,blx+130,330
-
- i=blx+1
- for a=16 to 47 step 3
- ink rgb(pcx(a),pcx(a+1),pcx(a+2)),rgb(0,0,0)
- box i,321,i+6,329
- inc i,8
- next a
-
- ink rgb(255,255,255),rgb(0,0,0)
- blx=320-255
- box blx,370,blx+513,380
- center text 320,350,"256 Colour Palette"
-
- i=blx+1
- for a=0 to 255
- ink rgb(vga_r(a),vga_g(a),vga_b(a)),rgb(0,0,0)
- box i,371,i+1,379
- inc i,2
- next a
-
- else
-
- x=0 : y=0 : c=128
-
- if bmap>0 then create bitmap bmap,dimensionx,dimensiony
-
- repeat
-
- repeat
-
- istream=pcx(c)
- dstream$=bin$(istream)
- dstream$=right$(dstream$,8)
-
- if val(left$(dstream$,1))=1 and val(mid$(dstream$,2))=1
- rlecount=0
- r=val(mid$(dstream$,3))
- if r=1 then inc rlecount,32
- r=val(mid$(dstream$,4))
- if r=1 then inc rlecount,16
- r=val(mid$(dstream$,5))
- if r=1 then inc rlecount,8
- r=val(mid$(dstream$,6))
- if r=1 then inc rlecount,4
- r=val(mid$(dstream$,7))
- if r=1 then inc rlecount,2
- r=val(mid$(dstream$,8))
- if r=1 then inc rlecount
-
- color=pcx(c+1)
- ink rgb(vga_r(color),vga_g(color),vga_b(color)),rgb(0,0,0)
-
- line x,y,x+rlecount,y
- inc x,rlecount
- inc c,2
-
- else
-
- color=pcx(c)
- ink rgb(vga_r(color),vga_g(color),vga_b(color)),rgb(0,0,0)
- if x<dimensionx
- dot x,y
- inc x
- endif
- inc c
-
- endif
-
- until x>=dimensionx
-
- x=0
- inc y
-
- until y>=dimensiony
-
- set current bitmap 0
-
- endif
-
- endfunction
-
-